function controls = generate_fixed_trajectory(dt, total_time, trajectory_type, obstacles, initial_state)
% 生成固定的控制序列（预定义安全轨迹，避免碰撞）
% 输入: dt-时间步长, total_time-总时间, trajectory_type-轨迹类型
%       obstacles-障碍物列表（可选）, initial_state-初始位置（可选）
% 输出: controls-控制序列 [v; omega] 每列一个时间步

    steps = total_time / dt;
    controls = zeros(2, steps);
    
    if nargin < 3 || isempty(trajectory_type)
        trajectory_type = 'safe_exploration';  % 默认安全探索型轨迹
    end
    
    if nargin < 4
        obstacles = [];
    end
    
    if nargin < 5
        initial_state = [25; 25; 0];  % 默认起点
    end
    
    switch trajectory_type
        case 'circle'
            % 圆形轨迹
            v = 1.0;
            omega = 0.1;
            for t = 1:steps
                controls(:, t) = [v; omega];
            end
            
        case 'square'
            % 方形轨迹
            segment_time = total_time / 4;
            segment_steps = segment_time / dt;
            v_straight = 1.0;
            omega_turn = pi / (2 * segment_time);  % 90度转弯
            
            for t = 1:steps
                segment = mod(floor((t-1) / segment_steps), 4);
                within_segment = mod(t-1, segment_steps);
                
                if within_segment < segment_steps * 0.8
                    % 直行
                    controls(:, t) = [v_straight; 0];
                else
                    % 转弯
                    controls(:, t) = [0.3; omega_turn];
                end
            end
            
        case 'figure8'
            % 8字形轨迹
            v = 1.0;
            omega_base = 0.15;
            period = total_time / 2;  % 半个周期完成一个环
            
            for t = 1:steps
                time = (t-1) * dt;
                phase = 2 * pi * time / period;
                omega = omega_base * sin(phase);
                controls(:, t) = [v; omega];
            end
            
        case 'exploration'
            % 基础探索型轨迹（可能碰撞，需要避障）
            % 如果提供了障碍物，自动切换到安全模式
            if ~isempty(obstacles)
                fprintf('警告: exploration模式可能碰撞，自动切换到safe_exploration\n');
                controls = generate_fixed_trajectory(dt, total_time, 'safe_exploration', obstacles, initial_state);
                return;
            end
            
            v_straight = 1.0;
            v_turn = 0.5;
            segments = [
                15, v_straight, 0.0;
                8,  v_turn, 0.3;
                12, v_straight, 0.0;
                6,  v_turn, -0.25;
                10, v_straight, 0.0;
            ];
            
            t = 1;
            for seg = 1:size(segments, 1)
                duration = segments(seg, 1);
                v = segments(seg, 2);
                omega = segments(seg, 3);
                seg_steps = round(duration / dt);
                
                for i = 1:seg_steps
                    if t <= steps
                        controls(:, t) = [v; omega];
                        t = t + 1;
                    end
                end
            end
            
            while t <= steps
                controls(:, t) = [v_straight; 0.08];
                t = t + 1;
            end
            
        case 'safe_exploration'
            % 安全探索型轨迹（专门设计避开50x50地图中的障碍物）
            % 起点: (25, 25), 障碍物布局已知
            % 策略: 走安全通道，覆盖主要区域
            v_straight = 1.0;
            v_turn = 0.6;
            
            % 精心设计的安全路径段 [持续时间, v, omega, 说明]
            % 基于障碍物位置: 左下(8-12,8-10), 右下(32-38,10-12), 
            %                中间竖条(18-20,28-38), 右上横条(28-38,32-34), 左上方块(8-13,38-42)
            segments = [
                % 第1段: 从中心向北移动（避开中间竖条）
                5,  v_straight, 0.0;       % 向北直行
                3,  v_turn, 0.4;           % 左转
                8,  v_straight, 0.0;       % 向西直行
                3,  v_turn, -0.4;          % 右转回正北
                8,  v_straight, 0.0;       % 继续北行
                
                % 第2段: 转向东，探索北部区域
                3,  v_turn, -0.4;          % 右转向东
                12, v_straight, 0.0;       % 向东直行
                3,  v_turn, 0.4;           % 左转向北
                5,  v_straight, 0.0;       % 北行
                
                % 第3段: 转向南，沿东侧下行
                3,  v_turn, -0.4;          % 右转（实际向东偏）
                3,  v_turn, -0.4;          % 再右转向南
                15, v_straight, 0.0;       % 向南直行
                
                % 第4段: 转向西，探索南部
                3,  v_turn, 0.4;           % 左转向东偏
                3,  v_turn, 0.4;           % 再左转向西
                10, v_straight, 0.0;       % 向西直行
                
                % 第5段: 回到中心区域
                3,  v_turn, -0.4;          % 右转向北
                10, v_straight, 0.0;       % 向北直行
                3,  v_turn, 0.4;           % 左转
                5,  v_straight, 0.0;       % 直行
            ];
            
            t = 1;
            for seg = 1:size(segments, 1)
                duration = segments(seg, 1);
                v = segments(seg, 2);
                omega = segments(seg, 3);
                seg_steps = round(duration / dt);
                
                for i = 1:seg_steps
                    if t <= steps
                        controls(:, t) = [v; omega];
                        t = t + 1;
                    end
                end
            end
            
            % 填充剩余时间 - 缓慢旋转观察
            while t <= steps
                controls(:, t) = [0.5; 0.15];
                t = t + 1;
            end
            
        case 'coverage'
            % 覆盖型轨迹（适合建图）
            % 类似割草机模式
            v = 1.0;
            row_length = 20;  % 每行长度（秒）
            turn_time = 4;    % 转弯时间
            
            row_steps = row_length / dt;
            turn_steps = turn_time / dt;
            omega_turn = pi / turn_time;  % 180度转弯
            
            t = 1;
            direction = 1;  % 1或-1
            
            while t <= steps
                % 直行
                for i = 1:row_steps
                    if t <= steps
                        controls(:, t) = [v; 0];
                        t = t + 1;
                    end
                end
                
                % 转弯（U型转弯）
                for i = 1:turn_steps
                    if t <= steps
                        controls(:, t) = [0.4; direction * omega_turn];
                        t = t + 1;
                    end
                end
                
                direction = -direction;
            end
            
        otherwise
            error('Unknown trajectory type: %s', trajectory_type);
    end
end

